package com.aaa.service.scl.impl;

import cn.hutool.core.util.ObjectUtil;
import com.aaa.aspect.InsertAnn;
import com.aaa.aspect.UpdateAnn;
import com.aaa.dao.scl.TestPlanSclDao;
import com.aaa.entity.PageSortEntity;
import com.aaa.entity.scl.TestPlanScl;
import com.aaa.service.scl.TestPlanSclService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.java.Log;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 测试计划fpa(TestPlanScl)表服务实现类
 *
 * @author makejava
 * @since 2022-08-31 20:35:39
 */
@Service("testPlanSclService")
@Log
public class TestPlanSclServiceImpl implements TestPlanSclService {
    @Resource
    private TestPlanSclDao testPlanSclDao;

    /**
     * 分页查询
     *
     * @param testPlanScl 筛选条件
     * @return 查询结果
     */

    @Override
    public Page queryAll(PageSortEntity pageSortEntity, TestPlanScl testPlanScl) {
        PageHelper.startPage(pageSortEntity.getPage(), pageSortEntity.getLimit(), pageSortEntity.getOrderString());
        List<TestPlanScl> SclList = testPlanSclDao.queryAllByLimit(testPlanScl);
        Page page = (Page) SclList;
        return page;
    }

    /**
     * 新增数据
     *
     * @param testPlanScl 实例对象
     * @return 实例对象
     */

    @InsertAnn
    @Override
    public TestPlanScl insert(TestPlanScl testPlanScl) {
        while (true) {
            // 用math.random()实现，比较麻烦的一种方式，思路是：math.random()生成的是[0.0, 1.0)的伪随机数，
            // 如果 当前值是0.9...，则直接*1000000返回，其他情况可能生成0.8...，0.03...，0.0003...，这些情况都*1000000，
            // 但是结果可能是6位，5位，4位都有可能，那么再加上100000，肯定就保证是6位了。
            int intFlag = (int) (Math.random() * 1000000);
            String flag = String.valueOf(intFlag);
            if (flag.length() == 6 && flag.substring(0, 1).equals("9")) {
                System.out.println(intFlag);
            } else {
                intFlag = intFlag + 100000;
                //System.out.println(intFlag);
            }

            TestPlanScl testPlanFpaNew = new TestPlanScl();
            testPlanFpaNew.setTestCode(intFlag);
            List<TestPlanScl> testPlanSclList = testPlanSclDao.queryByAllView(testPlanFpaNew);
            log.info("生成的随机数，跟数据库是否一致校验" + intFlag);
            if (ObjectUtil.isEmpty(testPlanSclList)) {
                //退出循环之前，将合法的随机数保存到实体对象中testPlanFpa
                testPlanScl.setTestCode(intFlag);
                break;
            }
        }
        this.testPlanSclDao.insert(testPlanScl);
        return testPlanScl;
    }

    /**
     * 修改数据
     *
     * @param testPlanScl 实例对象
     * @return 实例对象
     */
    @UpdateAnn
    @Override
    public boolean update(TestPlanScl testPlanScl) {
        return testPlanSclDao.update(testPlanScl);
    }

    /**
     * 删除数据
     *
     * @param list 实例对象
     * @return 实例对象
     */
    @Override
    public boolean deleteById(List list) {
        return testPlanSclDao.deleteById(list);
    }

    /**
     * @param testPlanScl
     * @return boolean
     * @description: 查询是否重名
     */
    @Override
    public boolean repetitionName(TestPlanScl testPlanScl) {
        Integer integer = this.testPlanSclDao.repetitionName(testPlanScl);
        if (integer == 0) {
            return true;
        }
        return false;
    }
}
